home *** CD-ROM | disk | FTP | other *** search
- #ifndef DEVICES_PRTBASE_H
- #define DEVICES_PRTBASE_H
- /*
- ** $VER: prtbase.h 44.1 (19.10.1999)
- ** Includes Release 44.1
- **
- ** printer driver structure definitions
- **
- ** (C) Copyright 1987-1999 Amiga, Inc.
- ** All Rights Reserved
- */
-
- #ifndef UTILITY_TAGITEM_H
- #include <utility/tagitem.h>
- #endif
-
- #ifndef EXEC_DEVICES_H
- #include <exec/devices.h>
- #endif
-
- #ifndef DEVICES_PARALLEL_H
- #include <devices/parallel.h>
- #endif
-
- #ifndef DEVICES_SERIAL_H
- #include <devices/serial.h>
- #endif
-
- #ifndef DEVICES_TIMER_H
- #include <devices/timer.h>
- #endif
-
- #ifndef DOS_DOSEXTENS_H
- #include <dos/dosextens.h>
- #endif
-
- #ifndef INTUITION_INTUITION_H
- #include <intuition/intuition.h>
- #endif
-
- /****************************************************************************/
-
- struct DeviceData
- {
- struct Library dd_Device; /* standard library node */
- APTR dd_Segment; /* A0 when initialized */
- APTR dd_ExecBase; /* A6 for exec */
- APTR dd_CmdVectors; /* command table for device commands */
- APTR dd_CmdBytes; /* bytes describing which command queue */
- UWORD dd_NumCommands; /* the number of commands supported */
- };
-
- /****************************************************************************/
-
- /* IO Flags */
- #define IOB_QUEUED 4
- #define IOB_CURRENT 5
- #define IOB_SERVICING 6
- #define IOB_DONE 7
-
- #define IOF_QUEUED (1L<<IOB_QUEUED)
- #define IOF_CURRENT (1L<<IOB_CURRENT)
- #define IOF_SERVICING (1L<<IOB_SERVICING)
- #define IOF_DONE (1L<<IOB_DONE)
-
- /* pd_Flags */
- #define PB_IOR0 0
- #define PB_IOR1 1
- #define PB_IOOPENED 2
- #define PB_EXPUNGED 7
-
- #define PBF_IOR0 (1L<<PB_IOR0)
- #define PBF_IOR1 (1L<<PB_IOR1)
- #define PBF_IOOPENDED (1L<<PB_IOOPENED)
- #define PBF_EXPUNGED (1L<<PB_EXPUNGED)
-
- /* du_Flags (actually placed in pd_Unit.mp_Node.ln_Pri) */
- #define DUB_STOPPED 0
-
- #define DUF_STOPPED (1L<<DUB_STOPPED)
-
- #define P_OLDSTKSIZE 0x0800 /* stack size for child task (OBSOLETE) */
- #define P_STKSIZE 0x1000 /* stack size for child task */
- #define P_BUFSIZE 256 /* size of internal buffers for text i/o */
- #define P_SAFESIZE 128 /* safety margin for text output buffer */
-
- /****************************************************************************/
-
- /*
- "struct PrinterData" was a very bad concept in the old V1.0 days
- because it is both: the device and the unit.
-
- Starting with V44 PrinterData may be duplicated for many Units. But all
- new fields that are specific to the Unit are now part of the new
- "struct PrinterUnit". Don't touch the private fields!
-
- A note on the function pointers in these data structure definitions:
- unless otherwise specified, all functions expect that their parameters
- are passed on the *stack* rather than in CPU registers. Every parameter
- must be passed a 32 bit long word, i.e. an "UWORD" will use the same
- stack space as an "ULONG".
- */
-
- struct PrinterData
- {
- struct DeviceData pd_Device;
-
- /* PRIVATE & OBSOLETE: the one and only unit */
- struct MsgPort pd_Unit;
-
- /* the printer specific segment */
- BPTR pd_PrinterSegment;
-
- /* the segment printer type */
- UWORD pd_PrinterType;
-
- /* the segment data structure */
- struct PrinterSegment * pd_SegmentData;
-
- /* the raster print buffer */
- UBYTE * pd_PrintBuf;
-
- /* the write function:
- *
- * LONG PWrite(APTR data,
- * LONG len);
- */
- LONG (*pd_PWrite)();
-
- /* write function's done:
- *
- * LONG PBothReady(VOID);
- */
- LONG (*pd_PBothReady)();
-
- /* PRIVATE: port I/O request 0 */
- union {
- struct IOExtPar pd_p0;
- struct IOExtSer pd_s0;
- } pd_ior0;
-
- #define pd_PIOR0 pd_ior0.pd_p0
- #define pd_SIOR0 pd_ior0.pd_s0
-
- /* PRIVATE: and 1 for double buffering */
- union {
- struct IOExtPar pd_p1;
- struct IOExtSer pd_s1;
- } pd_ior1;
-
- #define pd_PIOR1 pd_ior1.pd_p1
- #define pd_SIOR1 pd_ior1.pd_s1
-
- /* PRIVATE: timer I/O request */
- struct timerequest pd_TIOR;
-
- /* PRIVATE: and message reply port */
- struct MsgPort pd_IORPort;
-
- /* PRIVATE: write task */
- struct Task pd_TC;
-
- /* PRIVATE: and stack space (OBSOLETE) */
- UBYTE pd_OldStk[P_OLDSTKSIZE];
-
- /* PRIVATE: device flags */
- UBYTE pd_Flags;
-
- /* PRIVATE: padding */
- UBYTE pd_pad;
-
- /* the latest preferences */
- struct Preferences pd_Preferences;
-
- /* PRIVATE: wait function switch */
- UBYTE pd_PWaitEnabled;
-
- /**************************************************************
- *
- * New fields for V2.0:
- *
- *************************************************************/
-
- /* PRIVATE: padding */
- UBYTE pd_Flags1;
-
- /* PRIVATE: stack space (OBSOLETE) */
- UBYTE pd_Stk[P_STKSIZE];
-
- /**************************************************************
- *
- * New fields for V3.5 (V44):
- *
- *************************************************************/
-
- /* PRIVATE: the Unit. pd_Unit is obsolete */
- struct PrinterUnit * pd_PUnit;
-
- /* the read function:
- *
- * LONG pd_PRead(char * buffer,
- * LONG * length,
- * struct timeval * tv);
- */
- LONG (*pd_PRead)();
-
- /* call application's error hook:
- *
- * LONG pd_CallErrorHook(struct Hook * hook,
- * struct printerIO * ior,
- * struct PrtErrMsg * pem);
- */
- LONG (*pd_CallErrHook)();
-
- /* unit number */
- ULONG pd_UnitNumber;
-
- /* name of loaded driver */
- STRPTR pd_DriverName;
-
- /* the query function:
- *
- * LONG pd_PQuery(LONG * numofchars);
- */
- LONG (*pd_PQuery)();
- };
-
- /****************************************************************************/
-
- /* Printer Class */
- #define PPCB_GFX 0 /* graphics (bit position) */
- #define PPCF_GFX 0x1 /* graphics (and/or flag) */
- #define PPCB_COLOR 1 /* color (bit position) */
- #define PPCF_COLOR 0x2 /* color (and/or flag) */
-
- #define PPC_BWALPHA 0x00 /* black&white alphanumerics */
- #define PPC_BWGFX 0x01 /* black&white graphics */
- #define PPC_COLORALPHA 0x02 /* color alphanumerics */
- #define PPC_COLORGFX 0x03 /* color graphics */
-
- #define PPCB_EXTENDED 2 /* extended PED structure (V44) */
- #define PPCF_EXTENDED 0x4
-
- /*
- Some printer drivers (PrinterPS) do not support
- strip printing. An application has to print a page
- using a single print request or through clever use
- of the PRD_DUMPRPORTTAGS printing callback hook.
- */
- #define PPCB_NOSTRIP 3 /* no strip printing, please */
- #define PPCF_NOSTRIP 0x8
-
- /* Color Class */
- #define PCC_BW 0x01 /* black&white only */
- #define PCC_YMC 0x02 /* yellow/magenta/cyan only */
- #define PCC_YMC_BW 0x03 /* yellow/magenta/cyan or black&white */
- #define PCC_YMCB 0x04 /* yellow/magenta/cyan/black */
- #define PCC_4COLOR 0x04 /* a flag for YMCB and BGRW */
- #define PCC_ADDITIVE 0x08 /* not ymcb but blue/green/red/white */
- #define PCC_WB 0x09 /* black&white only, 0 == BLACK */
- #define PCC_BGR 0x0A /* blue/green/red */
- #define PCC_BGR_WB 0x0B /* blue/green/red or black&white */
- #define PCC_BGRW 0x0C /* blue/green/red/white */
-
- /*
- The picture must be scanned once for each color component, as the
- printer can only define one color at a time. ie. If 'PCC_YMC' then
- first pass sends all 'Y' info to printer, second pass sends all 'M'
- info, and third pass sends all C info to printer. The CalComp
- PlotMaster is an example of this type of printer.
- */
- #define PCC_MULTI_PASS 0x10 /* see explanation above */
-
- /****************************************************************************/
-
- struct PrinterExtendedData
- {
- /* printer name, null terminated */
- char * ped_PrinterName;
-
- /* called after LoadSeg:
- *
- * LONG ped_Init(struct PrinterData * pd);
- */
- VOID (*ped_Init)();
-
- /* called before UnLoadSeg:
- *
- * VOID ped_Expunge(VOID);
- */
- VOID (*ped_Expunge)();
-
- /* called at OpenDevice:
- *
- * LONG ped_Open(struct printerIO * ior);
- */
- LONG (*ped_Open)();
-
- /* called at CloseDevice:
- *
- * VOID ped_Close(struct printerIO * ior);
- */
- VOID (*ped_Close)();
-
- /* printer class */
- UBYTE ped_PrinterClass;
-
- /* color class */
- UBYTE ped_ColorClass;
-
- /* number of print columns available */
- UBYTE ped_MaxColumns;
-
- /* number of character sets */
- UBYTE ped_NumCharSets;
-
- /* number of 'pins' in print head */
- UWORD ped_NumRows;
-
- /* number of dots max in a raster dump */
- ULONG ped_MaxXDots;
-
- /* number of dots max in a raster dump */
- ULONG ped_MaxYDots;
-
- /* horizontal dot density */
- UWORD ped_XDotsInch;
-
- /* vertical dot density */
- UWORD ped_YDotsInch;
-
- /* printer text command table */
- STRPTR ** ped_Commands;
-
- /* special command handler:
- *
- * LONG ped_DoSpecial(UWORD * command,
- * UBYTE output_buffer[],
- * BYTE * current_line_position,
- * BYTE * current_line_spacing,
- * BYTE * crlf_flag,
- * UBYTE params[]);
- */
- LONG (*ped_DoSpecial)();
-
- /* raster render function:
- *
- * LONG ped_Render(LONG ct,LONG x,LONG y,LONG status);
- */
- LONG (*ped_Render)();
-
- /* good write timeout */
- LONG ped_TimeoutSecs;
-
- /**************************************************************
- *
- * The following only exists if the segment version is >= 33:
- *
- *************************************************************/
-
- /* Conversion strings for the extended font */
- STRPTR * ped_8BitChars;
-
- /* Set if text printed, otherwise 0 */
- LONG ped_PrintMode;
-
- /**************************************************************
- *
- * The following only exists if the segment version is >= 34:
- *
- *************************************************************/
-
- /* ptr to conversion function for all chars:
- *
- * LONG ped_ConvFunc(UBYTE * buf,
- * UBYTE c,
- * LONG crlf_flag);
- */
- LONG (*ped_ConvFunc)();
-
- /**************************************************************
- *
- * The following only exists if the segment version is >= 44
- * AND PPCB_EXTENDED is set in ped_PrinterClass:
- *
- *************************************************************/
-
- /* Attributes and features */
- struct TagItem * ped_TagList;
-
- /* driver specific preferences:
- *
- * LONG ped_DoPreferences(struct printerIO * ior,
- * LONG command);
- */
- LONG (*ped_DoPreferences)();
-
- /* custom error handling:
- *
- * VOID ped_CallErrHook(struct printerIO * ior,
- * struct Hook * hook);
- */
- VOID (*ped_CallErrHook)();
- };
-
- /****************************************************************************/
-
- /* The following tags are used to define more printer driver features */
-
- #define PRTA_Dummy (TAG_USER + 0x50000)
-
- /****************************************************************************/
-
- /* V44 features */
- #define PRTA_8BitGuns (PRTA_Dummy + 1) /* LBOOL */
- #define PRTA_ConvertSource (PRTA_Dummy + 2) /* LBOOL */
- #define PRTA_FloydDithering (PRTA_Dummy + 3) /* LBOOL */
- #define PRTA_AntiAlias (PRTA_Dummy + 4) /* LBOOL */
- #define PRTA_ColorCorrection (PRTA_Dummy + 5) /* LBOOL */
- #define PRTA_NoIO (PRTA_Dummy + 6) /* LBOOL */
- #define PRTA_NewColor (PRTA_Dummy + 7) /* LBOOL */
- #define PRTA_ColorSize (PRTA_Dummy + 8) /* LONG */
- #define PRTA_NoScaling (PRTA_Dummy + 9) /* LBOOL */
-
- /* User interface */
- #define PRTA_DitherNames (PRTA_Dummy + 20) /* STRPTR * */
- #define PRTA_ShadingNames (PRTA_Dummy + 21) /* STRPTR * */
- #define PRTA_ColorCorrect (PRTA_Dummy + 22) /* LBOOL */
- #define PRTA_DensityInfo (PRTA_Dummy + 23) /* STRPTR * */
-
- /* Hardware page borders */
- #define PRTA_LeftBorder (PRTA_Dummy + 30) /* LONG, inches/1000 */
- #define PRTA_TopBorder (PRTA_Dummy + 31) /* LONG, inches/1000 */
-
- #define PRTA_MixBWColor (PRTA_Dummy + 32) /* LBOOL */
-
- /* Driver Preferences */
- #define PRTA_Preferences (PRTA_Dummy + 40) /* LBOOL */
-
- /****************************************************************************/
-
- struct PrinterSegment
- {
- BPTR ps_NextSegment;
- ULONG ps_runAlert; /* MOVEQ #0,D0 : RTS */
- UWORD ps_Version; /* segment version */
- UWORD ps_Revision; /* segment revision */
- struct PrinterExtendedData ps_PED; /* printer extended data */
- };
-
- /****************************************************************************/
-
- /*
- Driver specific preferences. This structure is device specific: every
- driver must base its preferences structure on this to allow version
- checking etc.
-
- The application will read/write this structure as an I/O buffer.
- */
- struct PrtDriverPreferences
- {
- UWORD pdp_Version; /* PRIVATE! driver specific version */
- UBYTE pdp_PrinterID[32]; /* PRIVATE! driver specific id */
- char pdp_PrefName[FILENAME_SIZE-16];
- ULONG pdp_Length; /* size of this structure */
-
- /* .. more driver private fields follow .. */
- };
-
- #endif /* DEVICES_PRTBASE_H */
-